gdb 自定义脚本命令语法简单介绍 | 您所在的位置:网站首页 › gdb 数组 › gdb 自定义脚本命令语法简单介绍 |
1. # 为脚本注释命令 2. 赋值语句:set, set 命令很强大, a.它可以是设置gdb 的选项, 例如: set confirm off set verbose off set history filename ~/.gdb_history set history save set output-radix 0x10 set input-radix 0x10 set 选项可以用show 命令来查看设置效果 b. set 可以自定义变量,变量以$开始,以便区分是gdb还是调试程序变量。 变量可为全局或局部,视声明位置。 例如: set $x = 1; set $SHOW_CONTEXT = 1 set $SHOW_NEST_INSN = 0 set $CONTEXTSIZE_STACK = 6 set $CONTEXTSIZE_DATA = 8 set $CONTEXTSIZE_CODE = 8 set $data_addr = 0x400000 set 自定义变量的效果可以用 p 命令来检查 b.2: set 可以直接引用程序地址,计算代码数据位置,直接引用寄存器,可以打印,修改代码和数据 访问内容数据 set $_byte1 = *(unsigned char *)$pc set $_byte2 = *(unsigned char *)($pc+1) set $_byte3 = *(unsigned char *)($pc+2) 修改内存 set *(unsigned char *)$addr = 0x90 访问寄存器:反过来就是修改i寄存器 set $oldeax = $eax set $oldebx = $ebx set $oldecx = $ecx set $oldedx = $edx set $oldesi = $esi set $oldedi = $edi set $oldebp = $ebp set $oldesp = $esp
自动设置断点: set $_nextaddress = $pc + 0x3 thbreak *$_nextaddress set 访问用户程序资源的特性使得它可以监视和控制用户程序,这就是debug的核心所在. 再赋予流程控制,就是脚本语言. 3. 函数声明语句:define .. end 语句 具有一定功能的语句块为函数,目的是重用代码和结构化(就是把功能细分的意思) define func end 无行参声明,但可以直接用$arg1,$arg2引用, $argc 为形参个数 4. 显示语句: echo 5. 显示语句: printf 6. 条件语句: if..else..end 7. 循环语句: while .. end 8. 说明(帮助)语句: document.. end 为函数书写帮助说明 9. 常规的gdb 调试命令语句。 10. 支持shell 命令, 可以实现dump, search 等复杂功能 ---------------------------------------- 自定义 GDB 内存查找 ------------------------------------ define search set $start = (char *) $arg0 set $end = (char *) $arg1 set $pattern = (short) $arg2 set $p = $start while $p < $end if (*(short *) $p) == $pattern printf "pattern 0x%hx found at 0x%x\n", $pattern, $p end set $p++ end end document search Syntax: search | Search for the given pattern beetween $start and $end address. end
注意: gdb中使用的变量要加上'$'符号,否则会认为是被调试的程序中的变量 自定义的gdb命令脚本文件,可以用source 命令来导入。 由这几条简单语句已经勾勒出了脚本语言的概貌,可以与计算机交互了! 沟通愉快! |
CopyRight 2018-2019 实验室设备网 版权所有 |